//package com.chen.posp.util;
//
//import java.io.UnsupportedEncodingException;
//
//import javax.crypto.Cipher;
//
//import org.apache.commons.lang.StringUtils;
//import org.apache.commons.logging.Log;
//import org.apache.commons.logging.LogFactory;
//
//import UnionTech.JavaEsscAPI.CommWithEsscSvr;
//import UnionTech.JavaEsscAPI.UnionAPI;
//import UnionTech.JavaEsscAPI.esscFldTagDef;
//
//import com.yeepay.app.offLinePos.Constant;
//import com.yeepay.app.offLinePos.biz.Exception.SecretKeyException;
//import com.yeepay.app.offLinePos.common.enums.PosManufacturer;
//import com.yeepay.app.offLinePos.common.utils.iso8583.ISO8583Utile;
//
///**
// * 加密机的相关操作
// * @author lei-zhao
// */
//public class EncryptUtils {
//
//	private static Log log = LogFactory.getLog(EncryptUtils.class);
//	private static UnionAPI ua;
//	private static CommWithEsscSvr commWithEsscSvr;
//	
//	public final static String msg = "[essc platform or hsm error] ";
//
//	/**
//	 * 加密卡号秘钥明文 add by hongchao.li 2012-12-12
//	 */
//	private static String panEncryptKey;
//	
//	static {
//		PropertyUtil util = PropertyUtil.getInstance("encryptionMessage");
//		
//		// 获取加密机连接信息
//		String ip = util.getProperty("ip");
//		int port = Integer.parseInt(util.getProperty("port"));
//		int timeOut = Integer.parseInt(util.getProperty("timeOut"));
//		String gunionIDOfEsscAPI = util.getProperty("gunionIDOfEsscAPI");
//
//		ua = new UnionAPI(ip, port, timeOut, gunionIDOfEsscAPI);
//		commWithEsscSvr = new CommWithEsscSvr(ip, port, timeOut, gunionIDOfEsscAPI);
//		
//		/**
//		 * 获取加密卡号秘钥密文 add by hongchao.li 2012-12-12 begin 
//		 */
//		util = PropertyUtil.getInstance("springContext/systemConfig");
//		String panEncryptSecretKey = util.getProperty("PanEncryptSecretKey");
//		//获取加密卡号秘钥的明文
//		try {
//			panEncryptKey = ua.UnionDecryptEncData("pos.PanEncryptKey.zek", panEncryptSecretKey, "null", "posp");
//		} catch (Exception e) {
//			log.info("init panEncryptKey faild");
//		}
//		/**
//		 * end
//		 */
//	}
//	
//	/**
//	 * 加密银行卡号 add by hongchao.li 2012-12-12
//	 * @param pan  被加密的银行卡号
//	 * @return  加密后的银行卡号
//	 * @throws Exception
//	 */
//	public static String encryptPanData(String pan){
//		String result = pan;
//		if(StringUtils.isEmpty(pan)){
//			return result;
//		}
//		//获取密文以后对卡号进行加密
//		byte[] data = null;
//		try {
//			data = pan.getBytes("UTF-8");
//			byte[] key = ISO8583Utile.hexStringToByte(panEncryptKey);
//			int mode = Cipher.ENCRYPT_MODE;
//			//加密
//			byte[] secretPanArray = DESUtils.desCryt(data, key, mode);
//			result = ISO8583Utile.bytesToHexString(secretPanArray);
//		} catch (Exception e) {
//			log.info("encryptPanData utf-8 faild");
//		}
//		//加密后转换成16进制字符串
//		return result;
//	}
//	
//	/**
//	 * 解密银行卡号 add by hongchao.li 2012-12-12
//	 * @param secretPan  银行卡号密文
//	 * @return  银行卡号明文
//	 * @throws Exception
//	 */
//	public static String decryptPanData(String secretPan){
//		String result = secretPan;
//		if(StringUtils.isEmpty(secretPan)){
//			return result;
//		}
//		//获取密文以后对卡号进行加密
//		byte[] data = ISO8583Utile.hexStringToByte(secretPan);
//		byte[] key = ISO8583Utile.hexStringToByte(panEncryptKey);
//		int mode = Cipher.DECRYPT_MODE;
//		try {
//			//解密
//			byte[] secretPanArray = DESUtils.desCryt(data, key, mode);
//			//解密后utf-8编码
//			result = new String(secretPanArray,"UTF-8");
//		} catch (Exception e) {
//			log.info("decryptPanData utf-8 faild");
//		}
//		return result;
//	}
//
//	/*
//	 * 读取密钥并输出
//	 */
//	private static String[] readKey(String typeName, String code, String secretType) throws SecretKeyException {
//		try {
//			log.info(" fullKeyName: " + typeName + "." + code + "." + secretType.toLowerCase());
//			String[] s = ua.UnionReadKey(typeName + "." + code + "." + secretType.toLowerCase());
//			if (s != null) {
//				return change(s);
//			} else {
//				throw new SecretKeyException();
//			}
//		} catch (Exception e) {
//			log.error(msg+"keyName["+typeName + "." + code + "." + secretType.toLowerCase()+"], readKey error!", e);
//			throw new SecretKeyException();
//		}
//	}
//
//	/*
//	 * 随机产生新的密钥覆盖原密钥并输出
//	 */
//	private static String[] coverAndGetNewKey(String typeName, String code, String secretType) throws SecretKeyException {
//
//		log.info("fullKeyName: " + typeName + "." + code + "." + secretType.toLowerCase());
//		if ("zmk".equals(secretType)) {
//			throw new SecretKeyException();
//		}
//		try {
//			String[] s = ua.UnionGenerateKey(typeName + "." + code + "." + secretType.toLowerCase());
//			return change(s);
//		} catch (Exception e) {
//			log.error(msg+"keyName["+typeName + "." + code + "." + secretType.toLowerCase()+"], coverAndGetNewKey error!", e);
//			throw new SecretKeyException();
//		}
//	}
//
//	/*
//	 * 存储指定密钥
//	 */
//	private static void storeKey(String fullName, String key, String checkValue) throws SecretKeyException {
//		log.info("2 storeKey start!fullName=" + fullName + " key=" + key + " checkValue=" + checkValue);
//		try {
//			log.info("checkValue: " + checkValue);
//			if (checkValue == null || "".equals(checkValue) || "0000".equals(checkValue)) {
//				log.info("checkValue is null");
//				ua.UnionStoreKey(fullName, key, Constant.ESSC_CHECK_VALUE);
//			} else {
//				log.info("checkValue is not null! ");
//
//				ua.UnionStoreKey(fullName, key, checkValue);
//			}
//		} catch (Exception e) {
//			log.error(msg+"keyName["+fullName+"], storeKey error!", e);
//			throw new SecretKeyException();
//		}
//	}
//
//	/*
//	 * 产生mac
//	 */
//	private static String createMac(String macSrc, String fullKeyName) throws SecretKeyException {
//		try {
//			log.info("createMac: macSrc=" + macSrc + " fullKeyName=" + fullKeyName);
//			return ua.UnionGenerateMac(fullKeyName, macSrc.length(), macSrc);
//		} catch (Exception e) {
//			log.error(msg+"keyName["+fullKeyName+"],macSrc["+macSrc+"], createMac error!", e);
//			throw new SecretKeyException();
//		}
//	}
//
//	/*
//	 * 校验mac
//	 */
//	private static int verifyMac(String src, String mac, String fullKeyName) throws SecretKeyException {
//		try {
//			log.info("verifyMac: src=" + src + " mac=" + mac + " fullKeyName=" + fullKeyName);
//			return ua.UnionVerifyMac(fullKeyName, src.length(), src, mac);
//		} catch (Exception e) {
//			log.error(msg+"keyName["+fullKeyName+"],mac["+mac+"], verifyMac error!", e);
//			throw new SecretKeyException();
//		}
//
//	}
//
//	/**
//	 * 读取加密机中指定的密钥,pos机方面
//	 * @param posManufacturer Pos厂商简称
//	 * @param posCATI 终端号
//	 * @param secretType 密钥类型
//	 * @return
//	 * @throws SecretKeyException
//	 */
//	public static String[] readSecretkeyForPos(PosManufacturer posManufacturer, String posCATI, String secretType) throws SecretKeyException {
//
//		return readKey("pos", "HZR" + posCATI, secretType);
//
//	}
//
//	/**
//	 * 读取加密机中指定的密钥,银行方面
//	 * @param frpCode 银行编号
//	 * @param terminalNo 终端编号
//	 * @param secretType 密钥类型
//	 * @param mccCode mcc码
//	 * @return
//	 * @throws SecretKeyException
//	 */
//	public static String[] readSecretkeyForBank(String frpCode, String terminalNo, String mccCode, String secretType) throws SecretKeyException {
//
//		return readKey("bank", frpCode.toLowerCase() + "_" + mccCode + "_" + terminalNo, secretType);
//
//	}
//
//	/**
//	 * 产生新的密钥覆盖原来密钥 for Pos
//	 * @param posManufacturer Pos机厂商编号(枚举)
//	 * @param posCATI Pos机终端号
//	 * @param secretType 密钥类型
//	 * @return
//	 * @throws SecretKeyException
//	 */
//	public static String[] coverAndReadKeyForPos(PosManufacturer posManufacturer, String posCATI, String secretType) throws SecretKeyException {
//
//		return coverAndGetNewKey("pos", "HZR" + posCATI, secretType);
//	}
//
//	/**
//	 * 产生新的密钥覆盖原来密钥 for Bank
//	 * @param frpCode 银行编号
//	 * @param terminalNo 终端编号
//	 * @param mccCode mcc码
//	 * @param secretType 密钥类型
//	 * @return
//	 * @throws SecretKeyException
//	 */
//	public static String[] coverAndReadKeyForBank(String frpCode, String terminalNo, String mccCode, String secretType) throws SecretKeyException {
//		return coverAndGetNewKey("bank", frpCode.toLowerCase() + "_" + mccCode + "_" + terminalNo, secretType);
//	}
//
//	/**
//	 * 产生mac校验值for Pos
//	 * @param posManufacturer Pos机厂商编号(枚举)
//	 * @param macSrc 明文
//	 * @param posCATI Pos机终端号
//	 * @return
//	 * @throws SecretKeyException
//	 */
//	public static String createMacForPos(PosManufacturer posManufacturer, String posCATI, String macSrc) throws SecretKeyException {
//		return createMac(macSrc, "pos." + "HZR" + posCATI + ".zak");
//	}
//
//	/**
//	 * 产生mac校验值for Bank
//	 * @param frpCode 银行编号
//	 * @param terminalNo 终端编号
//	 * @param mccCode mcc码
//	 * @param macSrc 明文
//	 * @param posCATI Pos机终端号
//	 * @return
//	 * @throws SecretKeyException
//	 */
//	public static String createMacForBank(String frpCode, String mccCode, String terminalNo, String macSrc) throws SecretKeyException {
//		return createMac(macSrc, "bank." + frpCode.toLowerCase() + "_" + mccCode + "_" + terminalNo + ".zak");
//	}
//	
//	/**
//	 * 根据银行节点名称和源串生成mac
//	 * @param macSrc
//	 * @param fullKeyName
//	 * @return
//	 * @throws SecretKeyException
//	 */
//	public static String createMacForUnionpay(String macSrc, String fullKeyName) throws SecretKeyException {
//		try {
//			log.info("createMac: macSrc=" + macSrc + " fullKeyName=" + fullKeyName);
//			return ua.UnionGenerateMac(fullKeyName, macSrc.length(), macSrc);
//		} catch (Exception e) {
//			log.error(msg+"keyName["+fullKeyName+"],macSrc["+macSrc+"], createMac error!", e);
//			throw new SecretKeyException();
//		}
//	}
//
//
//	/**
//	 * 验证mac for Pos
//	 * @param posManufacturer Pos机厂商编号(枚举)
//	 * @param src 源明文
//	 * @param mac 源加密的mac
//	 * @return
//	 */
//	public static boolean verifyMacForPos(PosManufacturer posManufacturer, String posCATI, String src, String mac) {
//		try {
//			int i = verifyMac(src, mac, "pos." + "HZR" + posCATI + ".zak");
//			if (i == 0) {
//				return true;
//			}
//		} catch (SecretKeyException e) {
//			log.error("", e);
//			return false;
//		}
//
//		return false;
//	}
//
//	/**
//	 * 验证mac for Bank
//	 * @param frpCode 银行编号
//	 * @param mccCode mcc码
//	 * @param terminalNo 终端编号
//	 * @param src 源明文
//	 * @param mac 源加密的mac
//	 * @return
//	 */
//	public static boolean verifyMacForBank(String frpCode, String mccCode, String terminalNo, String src, String mac) {
//		try {
//			int i = verifyMac(src, mac, "bank." + frpCode.toLowerCase() + "_" + mccCode + "_" + terminalNo + ".zak");
//			if (i == 0) {
//				return true;
//			}
//		} catch (SecretKeyException e) {
//			log.error("", e);
//			return false;
//		}
//
//		return false;
//	}
//
//	/**
//	 * Pin转加密
//	 * @param posManufacturer Pos机厂商编号(枚举)
//	 * @param posCATI Pos机终端号
//	 * @param frpCode 银行编号
//	 * @param mccCode mcc码
//	 * @param terminalNo 终端编号
//	 * @param srcPin Pin原文
//	 * @param cardNo 卡号
//	 * @return
//	 * @throws SecretKeyException
//	 */
//	public static String TranslatePin(PosManufacturer posManufacturer, String posCATI, String frpCode, String mccCode, String terminalNo, String srcPin, String cardNo) throws SecretKeyException {
//
//		String posKey = "pos." + "HZR" + posCATI + ".zpk";
//		String bankKey = "bank." + frpCode.toLowerCase() + "_" + mccCode + "_" + terminalNo + ".zpk";
//
//		try {
//			log.info("TranslatePin :" + posKey + " -->>-->>  " + bankKey);
//			return ua.UnionTranslatePin(posKey, bankKey, srcPin, cardNo);
//		} catch (Exception e) {
//			log.error(msg+"keyName["+posKey+"], keyName2["+bankKey+"], TranslatePin4bank error! srcPin["+srcPin+"] , cardNo["+cardNo+"]", e);
//			throw new SecretKeyException();
//		}
//	}
//
//	/**
//	 * Pin转加密
//	 * @param posManufacturer Pos机厂商编号(枚举)
//	 * @param posCATI Pos机终端号
//	 * @param translatePinNodeName PIN转加密节点名称
//	 * @param srcPin Pin原文
//	 * @param cardNo 卡号
//	 * @return
//	 * @throws SecretKeyException
//	 */
//	public static String TranslatePin(PosManufacturer posManufacturer, String posCATI, String translatePinNodeName, String srcPin, String cardNo) throws SecretKeyException {
//
//		String posKey = "pos." + "HZR" + posCATI + ".zpk";
//
//		log.info("TranslatePin : posKey= " + posKey + " translatePinNodeName=" + translatePinNodeName + " srcPin=" + srcPin + " cardNo=" + cardNo);
//
//		try {
//			return ua.UnionTranslatePin(posKey, translatePinNodeName, srcPin, cardNo);
//		} catch (Exception e) {
//			log.error(msg+"keyName["+posKey+"], keyName2["+translatePinNodeName+"], TranslatePin4other error! srcPin["+srcPin+"] , cardNo["+cardNo+"]", e);
//			throw new SecretKeyException();
//		}
//	}
//
//	/**
//	 * 存储指定密钥 for Pos
//	 * @param posManufacturer
//	 * @param posCATI
//	 * @param secretType
//	 * @param key
//	 * @param checkValue
//	 * @throws SecretKeyException
//	 */
//	public static void StroeKeyForPos(PosManufacturer posManufacturer, String posCATI, String secretType, String key, String checkValue) throws SecretKeyException {
//
//		if ("zmk".equals(secretType)) {
//			throw new SecretKeyException();
//		}
//		String posKey = "pos." + "HZR" + posCATI + "." + secretType;
//		storeKey(posKey, key, checkValue);
//	}
//
//	/**
//	 * 存储指定密钥 for Bank
//	 * @param frpCode
//	 * @param mccCode mcc码
//	 * @param terminalNo 终端编号
//	 * @param secretType
//	 * @param key
//	 * @param checkValue
//	 * @throws SecretKeyException
//	 */
//	public static void StoreKeyForBank(String frpCode, String mccCode, String terminalNo, String secretType, String key, String checkValue) throws SecretKeyException {
//
//		if ("zmk".equals(secretType)) {
//			throw new SecretKeyException();
//		}
//		String bankKey = "bank." + frpCode.toLowerCase() + "_" + mccCode + "_" + terminalNo + "." + secretType;
//		storeKey(bankKey, key, checkValue);
//		log.info("StoreKeyForBank Success!");
//	}
//
//	public static String createPinKey(String fullKeyName, String clearPin, String accNo) {
//
//		log.info("createPinKey: fullKeyName=" + fullKeyName + " clearPin" + clearPin + " accNo" + accNo);
//		String s = null;
//
//		try {
//			s = ua.UnionEncryptPin(fullKeyName, clearPin, accNo);
//		} catch (Exception e) {
//			log.error(msg+"keyName["+fullKeyName+"] , createPinKey error!", e);
//		}
//		return s;
//	}
//
//	public static String[] change(String[] s) {
//		String[] s2 = new String[2];
//		s2[0] = s[0];
//		s2[1] = s[1].substring(0, 8);
//		return s2;
//	}
//
//	/**
//	 * 产生mac校验值for Bank 参数为byte数组
//	 * @param frpCode
//	 * @param mccCode mcc码
//	 * @param terminalNo 终端编号
//	 * @param macSrc
//	 * @param macLen
//	 * @return
//	 * @throws SecretKeyException
//	 */
//	public static String createMacForBank(String frpCode, String mccCode, String terminalNo, byte[] macSrc, int macLen) throws SecretKeyException {
//
//		String fullKeyName = "bank." + frpCode.toLowerCase() + "_" + mccCode + "_" + terminalNo + ".zak";
//		log.info("createMacForBank: fullKeyName=" + fullKeyName);
//
//		return UnionGenerateMacForByteData(fullKeyName, macSrc, macLen);
//	}
//
//	/**
//	 * 产生mac校验值for Bank private
//	 * @param fullKeyName
//	 * @param macData
//	 * @param lenOfMacData
//	 * @return
//	 * @throws SecretKeyException
//	 */
//	private static String UnionGenerateMacForByteData(String fullKeyName, byte[] macData, int lenOfMacData) throws SecretKeyException {
//
//		if (fullKeyName.length() == 0 || lenOfMacData <= 0) {
//			throw new SecretKeyException();
//		}
//		String packageBuf = ua.printCStyle(3, 2);
//		int offset = 3;
//		esscFldTagDef fldTag = new esscFldTagDef();
//		String packageBufFld;
//		try {
//			packageBufFld = ua.UnionPutFldIntoStr(fldTag.conEsscFldKeyName, fullKeyName, fullKeyName.length());
//			if (packageBufFld.length() == 0) {
//				throw new SecretKeyException();
//			}
//			offset += packageBufFld.length();
//			packageBuf += packageBufFld;
//			byte[] packageBufFldBit = ua.UnionBitPutFldIntoStr(fldTag.conEsscFldMacData, macData, lenOfMacData);
//			if (packageBufFldBit.length == 0) {
//				throw new SecretKeyException();
//			}
//			offset += packageBufFldBit.length;
//			byte[] packageBufBit = ua.bytePlusByte(packageBuf.getBytes(), packageBufFldBit);
//			commWithEsscSvr.returnPackage = "";
//			int MacLen = commWithEsscSvr.UnionBitCommWithEsscSvr("302", packageBufBit, offset);
//			String mac = "";
//			mac = ua.UnionReadSpecFldFromStr(commWithEsscSvr.returnPackage, MacLen, fldTag.conEsscFldMac);
//			return mac;
//		} catch (Exception e) {
//			log.error(msg+"keyName["+fullKeyName+"],macSrc["+ISO8583Utile.bytesToHexString(macData)+"],createMac4bank error!", e);
//			throw new SecretKeyException();
//		}
//	}
//
//	public static String getClearKey(PosManufacturer posManufacturer, String posCATI, String pinBlock, String accNo) throws SecretKeyException {
//
//		String clearKey = "";
//		String posKey = "pos." + "HZR" + posCATI + ".zpk";
//		log.info("getClearKey : fullkey=" + posKey + ", pinBlock.length[" + pinBlock.length() + "]");
//
//		try {
//			clearKey = ua.UnionDecryptPin(posKey, pinBlock, accNo);
//		} catch (Exception e) {
//			log.error(msg+"keyName["+posKey+"],pinBlock["+pinBlock+"],accNo["+accNo+"], getClearKey error!", e);
//			throw new SecretKeyException();
//		}
//		return clearKey;
//	}
//
//	/**
//	 * 数据加密服务
//	 * @param data_clear 数据明文
//	 * @return
//	 * @throws SecretKeyException
//	 */
//	public static String encryptPlainData(String data_clear) throws SecretKeyException {
//		if (data_clear == null || "".equals(data_clear)) {
//			log.error("encryptPlainData, data_clear is null !");
//			throw new SecretKeyException();
//		}
//		int remainderlen = 0;
//		int addlen = 0;
//		byte[] addbyte = new byte[8];
//		int len = data_clear.getBytes().length;
//		if (len % 8 != 0) {
//			remainderlen = len % 8; // 余数
//			addlen = 8 - remainderlen;
//			for (int i = 0; i < addlen; i++) {
//				addbyte[i] = (byte) 0x40;
//			}
//		}
//
//		byte[] data_clearbyte = new byte[len + addlen];
//		System.arraycopy(data_clear.getBytes(), 0, data_clearbyte, 0, len);
//		if (addlen > 0) {
//			System.arraycopy(addbyte, 0, data_clearbyte, len, addlen);
//		}
//		try {
//			data_clear = new String(data_clearbyte, "gb2312");
//		} catch (UnsupportedEncodingException e) {
//			log.error("", e);
//		}
//		log.info("encryptPlainData data_clear=" + data_clear);
//
//		String data_encrypt = null;
//		try {
//			data_encrypt = ua.UnionEncryptPlainData("pos.Track2DataEncrypt.zek", data_clear, "null", "posp");
//		} catch (Exception e) {
//			log.error(msg+"keyName[pos.Track2DataEncrypt.zek],track2DataEncrypt encryptPlainData error!");
//			throw new SecretKeyException();
//		}
//		return data_encrypt;
//	}
//	
//
//	/**
//	 * 解密数据
//	 * @param data_encrypt 数据密文
//	 * @return
//	 * @throws SecretKeyException
//	 */
//	public static String decryptEncData(String data_encrypt) throws SecretKeyException {
//		if (data_encrypt == null || "".equals(data_encrypt)) {
//			log.error("decryptEncData , data_encrypt is null!");
//			throw new SecretKeyException();
//		}
//		String data_clear = null;
//		try {
//			data_clear = ua.UnionDecryptEncData("pos.Track2DataEncrypt.zek", data_encrypt, "null", "posp");
//		} catch (Exception e) {
//			log.error(msg+"keyName[pos.Track2DataEncrypt.zek],decryptEncData error!");
//			throw new SecretKeyException();
//		}
//
//		int len = data_clear.getBytes().length;
//		byte[] data_clearbyte = data_clear.getBytes();
//
//		int flag = 0;
//		for (int i = len - 1; i >= 0; i--) {
//			if (0x40 == data_clearbyte[i]) {
//				flag++;
//			} else {
//				break;
//			}
//
//		}
//		log.info("encryptPlainData @ count=" + flag);
//		byte[] returnbyte = new byte[len - flag];
//
//		System.arraycopy(data_clearbyte, 0, returnbyte, 0, len - flag);
//		try {
//			data_clear = new String(returnbyte, "gb2312");
//		} catch (UnsupportedEncodingException e) {
//			log.error("", e);
//		}
//		log.info("encryptPlainData decryptEncData=" + data_clear);
//
//		return data_clear;
//	}
//
//	public static String encryptPin(String fullKeyName, String clearPin, String accNo) throws SecretKeyException {
//		try {
//			return ua.UnionEncryptPin(fullKeyName, clearPin, accNo);
//		} catch (Exception e) {
//			log.error(msg+"keyName["+fullKeyName+"], encryptPin error!", e);
//			throw new SecretKeyException();
//		}
//	}
//	
//	/**
//	 * 创建MAC，先存，再创建
//	 * @param fullKeyName 存储和创建所用的MAC
//	 * @param keyValue 密钥密文
//	 * @param macString MAC源串
//	 * @return
//	 * @throws SecretKeyException
//	 */
//	public static String createMac4UnionPay(String fullKeyName,String keyValue,String macString) throws SecretKeyException{
//		synchronized (ua) {
//			String macResult = "";
//			try {
//				ua.UnionStoreKey(fullKeyName, keyValue, Constant.ESSC_CHECK_VALUE);
//				macResult = ua.UnionGenerateChinaPayMac(fullKeyName, macString.length(), macString);
//			} catch (Exception e) {
//				log.error(msg+"keyName["+fullKeyName+"],macString["+macString+"] createMac4UnionPay exception!",e);
//				throw new SecretKeyException();
//			}
//			return macResult;
//		}
//	}
//
//	/**
//	 * 更新银行主密钥密文
//	 * @param fullKeyName 主密钥节点
//	 * @param keyValue 主密钥密文
//	 * @param checkValue 
//	 * @param superPosKeyName 母POS密钥节点
//	 * @throws Exception
//	 */
//  public static void storeKeyBySpecZmkForBank(String fullKeyName ,String keyValue, String checkValue,String superPosKeyName) throws Exception{
//		
//		ua.UnionStoreKeyBySpecZmk(fullKeyName,superPosKeyName, keyValue, checkValue);
//		
//	}
//  
//  public static void main(String args[]){
//	/*  try {
//		  EncryptUtils.StoreKeyForBank("9002011", "4511", "00001002", "ZPK", "4E4B3A779E40D1069ADCFDB195EE6FD310B9", "0000");
////		System.out.println(EncryptUtils.readSecretkeyForBank("9002011", "00001002", "4511", "ZAK"));
//	} catch (SecretKeyException e) {
//		// TODO Auto-generated catch block
//		e.printStackTrace();
//	}*/
//	  
//	  
//	 try {
//		 EncryptUtils.ua.UnionGenerateKey("bank.9002011_4511_00001002.zpk");;
//	 } catch (Exception e) {
//	 e.printStackTrace();
//	 }
//
//  }
//  
//}